package com.wxm.china.port.dds.vo.param;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *      179上报支付数据参数类
 * </p>
 *
 * @author: wxm
 * @Date: 2023/7/3
 */
@Data
public class PayExInfoStrParam implements Serializable{
    /**
     * 海关发起请求时，平台接收的会话ID
     */
    @JSONField(ordinal = 1)
    private String sessionID;

    /**
     * 支付原始数据表头
     */
    @JSONField(ordinal = 2)
    private PayExchangeInfoHead payExchangeInfoHead;

    /**
     * 支付原始数据表体
     */
    @JSONField(ordinal = 3)
    private List<PayExchangeInfoList> payExchangeInfoLists;

    /**
     * 返回时的系统时间
     */
    @JSONField(ordinal = 4)
    private String serviceTime;

    /**
     * 证书编号
     */
    @JSONField(ordinal = 5)
    private String certNo;

    /**
     * 签名结果值
     */
    @JSONField(ordinal = 6)
    private String signValue;


    /**
     * 支付原始数据表头
     */
    @Data
    public static class PayExchangeInfoHead implements Serializable {
        /**
         * 系统唯一序号[企业系统生成 36 位唯一序号（英文字母大写）]
         */
        @JSONField(ordinal = 1)
        private String guid;

        /**
         * 原始请求
         */
        @JSONField(ordinal = 2)
        private String initalRequest;

        /**
         * 原始响应
         */
        @JSONField(ordinal = 3)
        private String initalResponse;

        /**
         * 电商平台代码[电商平台的海关注册登记编号]
         */
        @JSONField(ordinal = 4)
        private String ebpCode;

        /**
         * 支付企业代码[支付企业的海关注册登记编号]
         */
        @JSONField(ordinal = 5)
        private String payCode;

        /**
         * 交易流水号[交易唯一编号（可在央行认可的机构验证）]
         */
        @JSONField(ordinal = 6)
        private String payTransactionId;

        /**
         * 交易金额[实际交易金额]
         */
        @JSONField(ordinal = 7)
        private BigDecimal totalAmount;

        /**
         * 币制[实际交易币制（海关编码）]
         */
        @JSONField(ordinal = 8)
        private String currency;

        /**
         * 验核机构[1-银联 2-网联 3-其他]
         */
        @JSONField(ordinal = 9)
        private String verDept;

        /**
         * 支付类型[用户支付的类型。1-APP 2-PC 3-扫码 4-其他]
         */
        @JSONField(ordinal = 10)
        private String payType;

        /**
         * 交易成功时间[yyyyMMddHHmmss]
         */
        @JSONField(ordinal = 11)
        private String tradingTime;

        /**
         * 备注
         */
        @JSONField(ordinal = 12)
        private String note;
    }

    /**
     * 支付原始数据表体
     */
    @Data
    public static class PayExchangeInfoList implements Serializable{
        /**
         * 订单编号[交易平台向海关申报订单的的订单编号。需返回原始请求内的所有订单]
         */
        @JSONField(ordinal = 1)
        private String orderNo;

        /**
         * 商品信息[商品名称及商品展示链接地址列表]
         */
        @JSONField(ordinal = 2)
        private List<PayCheckGoodsInfo> goodsInfo;

        /**
         * 收款账号[交易商品的卖方商户账号。电商平台自营商户应填写自营商户的收款账户；非自营电商应填写非自营商户的收款账户]
         */
        @JSONField(ordinal = 3)
        private String recpAccount;

        /**
         * 收款企业代码[应填写收款企业代码（境内企业为统一社会信用代码；境外企业可不填写）]
         */
        @JSONField(ordinal = 4)
        private String recpCode;

        /**
         * 收款企业名称[应填写收款企业名称]
         */
        @JSONField(ordinal = 5)
        private String recpName;
    }

    /**
     * 商品描述类
     */
    @Data
    public static class PayCheckGoodsInfo implements Serializable{
        /**
         * 商品名称
         */
        private String gname;

        /**
         * 商品展示链接地址
         */
        private String itemLink;
    }
}
